#ifndef _SINGLETON_H_
#define _SINGLETON_H_

#include <iostream>

/**
 * Classe permettant de r�aliser un Singleton de n'importe quelle classe pass�e en param�tre (Template)
 * @author Mathieu JUDDE math.devel@gmail.com
 * @version $Id: Singleton.h 33 2007-07-06 09:37:32Z math.devel $
 */ 
template <class T> class Singleton
{
	public:
		/**
  		 * Retourne l'unique instance de la classe.<br />
		 * Cr�e l'instance si m_instance est NULL.
		 * @return Un pointeur vers l'unique instance
		 */
		static T* getInstance( void );

		/**
  		 * D�truit l'instance.<br />
		 */
		static void destroy( void );

	protected:
		/**
  		 * Constructeur par d�faut.<br />
		 */
		Singleton( void );
		/**
  		 * Destructeur.<br />
		 */
		 ~Singleton( void );

		/**
  		 * Constructeur par recopie protected pour interdire la copie.<br />
		 */
		Singleton( Singleton& );
		/**
  		 * Op�rateur d'affectation protected pour interdire la copie.<br />
		 */
		void operator =( Singleton& );

		static T * m_instance;
};

#include "Singleton.cc"
#endif
